package com.bite.spring.demo.controller;

import com.bite.spring.demo.model.UserInfo;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/Request")
@RestController
public class RequestContorller {
    @RequestMapping("/r1")
    public String r1(String keyWord) {
        return "接收参数: " + keyWord;
    }

    @RequestMapping("/r2")
    public String r2(String userName, String postWord) {
        return "接收参数:用户名:" + userName + "密码" + postWord;
    }

    @RequestMapping("/r3")
    public String r3(Integer number) {
        return "接收参数" + number;
    }

    @RequestMapping("/r4")
    public String r4(int number) {
        return "接收参数" + number;
    }

    //接收对象参数；
    @RequestMapping("/r5")
    public String r5(UserInfo userInfo) {
        return "接收参数：UserInfo" + userInfo;
    }

    //从前端进行获取q,赋值给key;
    @RequestMapping("/r6")
    public String r6(@RequestParam(value = "q", required = false) String key) {
        return "接收参数：key" + key;
    }

    //进行传递数组；
    @RequestMapping("/r7")
    public String r7(String[] array) {
        return "接收数组：array" + Arrays.toString(array);
    }

    //传递集合；
    @RequestMapping("/r8")
    public String r8(@RequestParam List<Integer> list) {
        return "接收参数：list" + list;
    }

    //传递Json对象；
    @RequestMapping("/r9")
    public String r9(@RequestBody UserInfo userInfo) {
        return userInfo.toString();
    }

    //从Url中进行获取参数；
    @RequestMapping("/article/{articleID}")
    public String r10(@PathVariable Integer articleID) {
        return "文章ID:" + articleID;
    }

    @RequestMapping("/article/{type}/{articleID}")
    public String r11(@PathVariable Integer articleID, @PathVariable String type) {
        return "文章类型" + type + "文章ID" + articleID;
    }

    //上传文件；
    @RequestMapping("/r12")
    public String r12(@RequestPart("file11") MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());
        //进行文件上传；
        file.transferTo(new File("D:\\temp\\" + file.getOriginalFilename()));
        return "文件获取成功";
    }
//    //进行使用Cookie;
//    @RequestMapping("/r13")
//    public String r13(HttpServletRequest request){
//        Cookie[] cookies= request.getCookies();
//        if(cookies!=null) {
//            for (Cookie cookie : cookies) {
//                System.out.println(cookie.getName()+":"+cookie.getValue());
//            }
//        }
//        return "返回Cookie成功";
//    }
//    @RequestMapping("/r14")
//    public String r14(@CookieValue("java") String java){
//        return "从Cookie中获取java的值"+java;
//    }
//    //进行存储sesssion;
//    @RequestMapping("/setSession")
//    public String setSession(HttpServletRequest request){
//        //接下来：进行从Cookie中进行获取sessionId,
//        // 紧接着通过sessionId进行获取session对象；
//        //如果session对象不存在，则进行创建；
//        HttpSession session=request.getSession();
//        //session对象默认存储到内存中；
//        //接下来：进行登录操作
//        // 设置session对象的用户名和用户信息；
//        session.setAttribute("userName","zhuangsan");
//        session.setAttribute("age",10);
//        return "设置session成功";
//    }
//    //进行获取session;
//    //方法一：
//    @RequestMapping("/getSession")
//    public String getSession(HttpServletRequest request){
//        //通过cookie进行获取sessionId
//        //通过sessionId进行获取session对象；
//       HttpSession session= request.getSession(false);
//       //进行用户登录的过程中：如果session存在就可以进行成登录，若不存在就不能进行登录，会返回一个null;
//        if(session==null){
//            return "用户之前没有进行登录过";
//        }else{
//            //存在session，接下来进行从session中进行获取登录用户的信息；
//            String userName=(String) session.getAttribute("userName");
//            return "登录用户名字为:"+userName;
//        }
//    }
//    //方法二：进行获取session;
//    @RequestMapping("/getSession2")
//    public String getSession2(HttpSession request){
//        String userName=(String)request.getAttribute("userName");
//        return "用户名为："+userName;
//    }
//    //进行获取报头；
//    @RequestMapping("/getHeader")
//    public String getHeader(HttpServletRequest request){
//        String userAgent= request.getHeader("User-Heder");
//
//    }

    //进行cookie 的正确使用；
    //进行cookie的获取；
    @RequestMapping("/r13")
    public String r13(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                System.out.println(cookie.getName() + ":" + cookie.getValue());
            }
        }
        return "返回cookie成功";
    }

    //进行session的存储；
    //存储session;
    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request) {
        //进行通过cookie中进行获取sessionID，通过sessionID进行获取session
        //如果session不存在就进行创建，session默认存储到内存；
        HttpSession session = request.getSession();
        //接下来进行登录用户；
        //如果用户存就直接进行创建，如果不存在就进行创建
        session.setAttribute("userName", "zhuangsan");
        session.setAttribute("pastWord", "12345");
        return "session创建成功" + session;
    }

    //方法一：进行session的获取；
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request) {
        //首先进行从cookie中进行获取sessionID,接着从sessionID中进行获取session;
        HttpSession session = request.getSession(false);
        //false的用途：如果用户登录过就可以直接进行获取相关的用户信息；否则就说明是新的用户，就会返回一个null;
        if (session == null) {
            return "用户不存在，不能进行登录，需要进行创建新用户";
        } else {
            //进行从session中进行获取用户的信息；
            String userName = (String) session.getAttribute("userName");
            return "用户的信息为：" + userName;
        }
    }
    //方法二：进行session的获取；
    @RequestMapping("/getSession2")
    public String geSession2(HttpSession session){
        //进行从Cookie中获取sessionID，接着从sessionID中进行session；
        //这种方法直接进行获取用户的登录信息；
        String userName=(String) session.getAttribute("userName");
        return "用户的登录信息为："+userName;
    }
    //方法三：进行session的获取；
    @RequestMapping("/getSession3")
    public String getSession3(@SessionAttribute("userName") String userName){
        return "用户的登录信息为："+userName;
    }
    //方法一：进行获取header相关的信息；
    @RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request){
        String userAgent=request.getHeader("userAgent");
        return "进行获取userAgent的相关参数"+userAgent;
    }
    //方法二：进行获取header相关参数；
    @RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader("userAgent") String userAgent){
        return "进行获取userAgent的相关参数"+userAgent;
    }
}
